使用scala在spark 您所在的位置:网站首页 spark 邮件按串分组 使用scala在spark

使用scala在spark

2024-07-11 22:45| 来源: 网络整理| 查看: 265

环境- spark-3.0.1-bin-hadoop2.7、eclipse 2.12.3、Scala、SparkSQL、eclipse-jee-oxygen-2-linux-gtk-x86_64

我有一个csv文件,它有3列数据类型:String,Long,Date。我想按字符串的第一列进行分组,并检索最大的日期值。

为此,我从文本文件中创建了Person对象的RDD,并将其转换为dataframe 'peopleDF‘。已将数据帧注册为临时视图。我使用spark提供的sql方法运行以下sql语句。

代码语言:javascript复制val maxDateDF = spark.sql("SELECT name, max(birthDate) maxDate FROM people group by name")

但是它没有给出一个名字的正确的最大日期。

我的样本数据如下

代码语言:javascript复制Michael, 29,01/03/1992 Justin, 19,01/05/2002 Ben Stokes, 29,01/07/1992 Justin, 18,01/08/2003 Ben Stokes, 29,01/07/1993 Ben Stokes, 29,30/06/1993

如何检索按其他字段名称分组的最大日期值?

代码语言:javascript复制package org.apache.spark.examples.sql import org.apache.spark.sql.Row import org.apache.spark.sql.SparkSession import org.apache.spark.sql.types._ import java.sql.Date import breeze.linalg.max object SparkSQLExample1 { case class Person(name: String, age: Long, birthDate: String) def main(args: Array[String]): Unit = { val spark = SparkSession.builder().appName("Spark SQL basic example") .config("spark.master", "local").getOrCreate(); import spark.implicits._ runInferSchemaExample(spark); spark.stop() } private def runInferSchemaExample(spark: SparkSession): Unit = { import spark.implicits._ val peopleDF = spark.sparkContext .textFile("examples/src/main/resources/people.txt") .map(_.split(",")) .map(attributes => Person(attributes(0), attributes(1).trim.toInt,attributes(2))) .toDF() peopleDF.groupBy("age").count().show(); peopleDF.groupBy("name").avg("age").show(); peopleDF.createOrReplaceTempView("people") implicit val mapEncoder = org.apache.spark.sql.Encoders.kryo[Map[String, Any]] val maxDateDF = spark.sql("SELECT name, max(birthDate) maxDate FROM people group by name") maxDateDF.map(teenager => teenager.getValuesMap[Any](List("name", "maxDate"))).collect().foreach(println) } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有